package com.mcm.dao;

import java.util.LinkedList;

import com.mcm.dto.Producto;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;

public class ProductosDao 
{
	public LinkedList<Producto> getProductos()
	{
		LinkedList<Producto> lista = new LinkedList<Producto>();
		try{
			DBCollection coll = MongoConnection.getProductosCollection();
			DBCursor cursor = coll.find().sort(new BasicDBObject("nombre",1));
			
			while(cursor.hasNext())
			{
				Producto p = crearProducto(cursor.next());
				lista.add(p);
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		return lista;
	}
	
	public void guardarProducto(Producto p)
	{
		DBCollection productos = MongoConnection.getProductosCollection();
		
		BasicDBObject doc = new BasicDBObject("nombre", p.getDescripcion()).
				append("precioCompra", p.getPrecio()).
				append("precioVenta", p.getPrecioVenta()).
				append("cantidad", p.getCantidad()).
				append("chequeado", false);
		productos.insert(doc);
	}
	
	public void actualizarProducto(Producto p)
	{
		DBCollection productos = MongoConnection.getProductosCollection();
		
		BasicDBObject queryBusqueda = new BasicDBObject().append("nombre", p.getDescripcion());
		DBObject producto = productos.findOne(queryBusqueda);
		
		BasicDBObject query = new BasicDBObject();
		BasicDBObject datosParaActualizar = new BasicDBObject().
				append("cantidad", p.getCantidad()).
				append("precioCompra", p.getPrecio()).
				append("precioVenta", p.getPrecioVenta());

		query.append("$set", datosParaActualizar);
	 
		productos.update(producto, query);
	}
	
	private Producto crearProducto(DBObject prod)
	{
		Producto p = new Producto();
		
//		p.setProductoId();
		p.setDescripcion((String)prod.get("nombre"));
		p.setPrecio((Double)prod.get("precioCompra"));
		p.setPrecioVenta((Double)prod.get("precioVenta"));
		p.setCantidad((Integer)prod.get("cantidad"));
		p.setChequeado(false);
		
		return p;
	}

}
